package cn.genmer.test.security.writtenTest.alibaba;

/**
 * @program:
 * /*
 *  问题：查找最大的不重复数
 * 问题描述
 * 如果一个数字十进制表达时，不存在连续两位相同，则称之为“不重复数”。例如，105、1234和12121都是“不重复数”，
 * 而11、100和1225不是。给定一个正整数A，返回大于A的最小“不重复数”。A小于100000
 * 输入示例：
 * 输入：iValue =54
 * 返回： 56
 * 输入：iValue =10
 * 返回： 12
 * 输入：iValue =98
 * 返回： 101
 * 输入：iValue =21099
 * 返回： 21201
 * @description: 第二次阿里外包在线笔试，在 https://alibole.alibaba-inc.com/intervieweeRoom.htm?token=bc4e6d7f-3a44-4971-aecb-e2641809365b&lang=zh&title=
 * @author: Genmer
 * @create: 2021-09-10 16:18
 **/
public class NoReapeatNumber {
    public static void main(String[] args) {
        System.out.println(notRepeat(98));
    }

    /**
     * 发现不重复数
     * @param num
     * @return
     */
    public static int notRepeat(int num){
        // 存储当前最小值
        int min = 0;
        while(true){
            // 从输入的值开始+，判断当前数是否为“不重复数”
            num++;
            // 记录当前数，如果遍历完这个数发现为不重复数，直接返回
            min = num;
            String numberStr = String.valueOf(num);
            char[] numberChar = numberStr.toCharArray();
            // 用来记录遍历过程中是否发现重复数，如果是，继续加
            int flag = 0;
            // 遍历字符数组，对比临近两个字符是否一致
            for(int i =0; i<numberChar.length-1; i++){
                // 如果一致，是重复数
                if(numberChar[i] == numberChar[i+1]){
                    // flag++，导致会走下一个数
                    flag ++;
                    break;
                }
            }
            // 如果为0，说明为不重复数
            if (flag == 0){
                // int 为基本类型，Java中是值传递，不会影响逃逸分析优化
                return min;
            }
        }
    }

}
